Markup & Markdown
contents
마크업과 마크다운은 모두 일반 텍스트 문서에 설명 정보(메타데이터)를 추가하는 방법입니다. 핵심적인 차이점은 그 철학에 있습니다. 마크업은 의미론(semantics)과 엄격함에 초점을 맞추는 반면, 마크다운은 사람의 가독성과 단순함에 중점을 둡니다.
파트 1: 마크업 언어 (범주) 🏗️
마크업 언어는 텍스트와 구문적으로 구별되는 방식으로 문서에 주석을 달기 위한 시스템입니다. 종종 태그(tag) 라고 불리는 이 주석들은 콘텐츠의 구조, 표현, 그리고 의미론적 역할을 정의합니다.
핵심 원칙
- 명시적 태깅: 마크업은 요소들을 정의하기 위해 명시적이고 형식적인 구문(예: 꺾쇠 괄호
< >)을 사용합니다.- 예시: HTML에서 텍스트를 굵게 만들려면:
<b>굵은 텍스트</b>. 태그(<b>,</b>)는 마크업이고, "굵은 텍스트"는 콘텐츠입니다.
- 예시: HTML에서 텍스트를 굵게 만들려면:
- 구조와 의미론: 마크업은 콘텐츠의 _역할_을 정의합니다. HTML은 단순히 "이 텍스트를 크게 만들어라"라고 말하는 것이 아니라, "이것은 주 제목이다"(
<h1>)라고 말합니다. 이는 텍스트에 의미론적 의미를 부여합니다. - 엄격함: 마크업 언어는 종종 공식적인 문법이나 스키마(XML의 문서 타입 정의(DTD) 등)에 의해 엄격하게 정의됩니다. 파싱(Parsing)에는 견고하고 복잡한 도구가 필요합니다.
- 목적: 자동 처리, 웹 브라우저 표시 또는 구조화된 데이터 전송을 위해 문서를 준비하는 것입니다.
주요 예시
- HTML (HyperText Markup Language): 가장 유명한 예입니다. 월드 와이드 웹에서 콘텐츠의 구조와 표현을 정의합니다. SGML/XML 원칙을 적용한 것입니다.
- XML (eXtensible Markup Language): 주로 데이터 전송 및 저장에 사용됩니다. 사용자가 자신만의 태그를 정의할 수 있으며, 표현보다는 의미론과 데이터 구조에 중점을 둡니다.
- SGML (Standard Generalized Markup Language): HTML과 XML의 역사적 전신이며, 마크업 언어를 정의하기 위한 메타 언어입니다.
파트 2: 마크다운 (경량 표준) 📝
마크다운(Markdown) 은 존 그루버가 만든 특정 경량 마크업 언어로, 최대의 가독성과 최소의 작성 노력에 중점을 두고 설계되었습니다.
핵심 철학: 가독성
근본적인 차이점은 마크다운이 태그로 마크업된 것처럼 보이지 않으면서도, 일반 텍스트 형태로 작성되고 읽히도록 설계되었다는 점입니다. 원본 텍스트 자체가 깔끔하고 직관적으로 보여야 합니다.
문법 및 변환
마크다운은 서식을 나타내기 위해 간단하고 일반적인 문장 부호(별표, 해시 기호, 대시 등)를 사용합니다.
- 간단한 문법:
| 마크다운 | HTML 등가물 | 목적 |
|---|---|---|
# 제목 1 |
<h1>제목 1</h1> |
제목 |
**굵은 텍스트** |
<b>굵은 텍스트</b> |
강조 |
* 목록 항목 |
<li>목록 항목</li> |
순서 없는 목록 |
> 인용구 |
<blockquote>인용구</blockquote> |
블록 인용 |
- 프로세서 (변환기): 마크다운 파일(
.md)은 브라우저에 의해 직접 표시되지 않습니다. 먼저 마크다운 프로세서(예: CommonMark, GFM)에 의해 처리되어, 이 경량 구문을 거의 항상 HTML인 대상 형식으로 변환해야 합니다.
방언 및 표준화
원래 마크다운 명세가 간결했기 때문에, 많은 버전(방언)이 등장했으며, 각 버전은 필요한 기능(테이블, 각주 또는 구문 강조 등)을 추가했습니다.
- GFM (GitHub Flavored Markdown): 작업 목록(
- [ ])과 같은 기능을 추가한 가장 인기 있는 방언입니다. - CommonMark: 서로 다른 파서 간의 일관성을 보장하기 위해 마크다운에 대한 모호하지 않은 엄격한 명세를 만들려는 커뮤니티의 노력입니다.
상세 비교 및 사용 사례 ⚖️
| 특징 | 마크업 (HTML/XML) | 마크다운 (예: GFM) |
|---|---|---|
| 철학 | 기계 우선, 의미론 중심. 콘텐츠가 무엇인지(목록, 단락, 헤더)를 정의. | 인간 우선, 가독성 중심. 단순한 문자로 텍스트가 _어떻게 보이는지_를 정의. |
| 엄격함 | 높음. 태그는 올바르게 열리고 닫혀야 함. | 낮음. 관대함; 구문 오류는 종종 무시되거나 일반 텍스트로 처리됨. |
| 데이터 구조 | 복잡하고 중첩된 데이터 구조에 탁월함 (XML). | 복잡한 데이터 구조에는 적합하지 않음. |
| 출력 | 출력을 직접 정의함 (브라우저가 HTML을 렌더링). | 최종 출력(HTML)을 생성하려면 변환기가 필요함. |
| 주요 사용처 | 웹 페이지 구조, API 응답 형식(XML), 표준 문서 정의(JATS). | README 파일, 기술 문서, 위키, 블로그 게시물, 채팅 애플리케이션(Slack/Discord). |
references